''''''''''''''''''''''''''''''''''''''''''''''
' Enventory
'
' vbscript toolset to support administration, Enventory and control of AD Users and PC assets
'
' Copyright (C) ' by ufe@gmx.de
' started  July/August 2008, 
' based on work done within ::
'''''''''''''''''''''''''''''''''''
' Open Audit                  '
' http://open-audit.org	      '
' Software and Hardware Enventory '
' Outputs into MySQL          '
' (c) Mark Unwin 2003         '
'''''''''''''''''''''''''''''''''''
'
' This program is free software; you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation; either version 2 of the License, or
' (at your option) any later version.

' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
' GNU General Public License for more details.

' You should have received a copy of the GNU General Public License along
' with this program; if not, write to the Free Software Foundation, Inc.,
' 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
'
Option Explicit
'  64bit workaround
'
' this script code relies on 32bit COM objects, if we are running on
' a 64bit system we will want to run under WOW64 (the x86 emulator).

'http://blogs.msdn.com/b/joshpoley/archive/2008/09/18/running-32bit-dependent-scripts-in-a-64bit-world.aspx

dim myHostShell

public function IS64()
	On Error Resume Next
	
	Dim WshShell
	Dim OsType

	Set WshShell = CreateObject("WScript.Shell")

	OsType = WshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE")

	If OsType = "x86" then
		'wscript.excho "Windows 32bit system detected"
		IS64 = false
	elseif OsType = "AMD64" then
		'wscript.echo "Windows 64bit system detected"
		IS64 = true
	end if
end function

public function ISshell64()
	'On Error Resume Next
	
	Dim host
	host = WScript.FullName
	host = lcase(host)
	'wscript.echo "ISshell64 host:" & host
	if is64() then
	'	wscript.echo "is 64"
	'	wscript.echo InStr(1, host, "system32", vbTextCompare)
		if InStr(1, host, "system32", vbTextCompare) <> 0 then
	'		wscript.echo "64 bit - 64bit shell detected"
			ISshell64 = true
		else
	'	wscript.echo InStr(1, host, "syswow64", vbTextCompare) 
		if  InStr(1, host, "syswow64", vbTextCompare) <> 0 then 
	'			wscript.echo "64 bit - 32bit shell detected"
				ISshell64 = false
			end if
		end if
	else
	   ISshell64 = false
	end if
end function

public function WinDirGet()
	dim shell
	set shell = WScript.CreateObject("WScript.Shell")
	WinDirGet = shell.ExpandEnvironmentStrings("%windir%")
end function

public function ParameterGet()
	dim strArg
	Dim ArgObj
	Set ArgObj = WScript.Arguments
	'wScript.Echo WScript.Arguments.Count
	ParameterGet = ""
	For Each strArg in ArgObj
		ParameterGet = ParameterGet & " " & strArg
    next
end function  
	

' check to see if we are on an AMD64 processor and running the
' wrong version of the scripting host.

if IS64() then
	myHostShell = "64"
else
	myHostShell =  "32"
end if

if ISshell64() then
	myHostShell = myHostShell & "/shell64"
else
	myHostShell = myHostShell & "/shell32"
end if 
 
 
if ISshell64() then
    dim newcmd
	newcmd = windirget()&"\SysWoW64\Mycscript.exe " & WScript.ScriptFullName & ParameterGet()
	dim shell
	dim exec
	dim ret
	set shell = WScript.CreateObject("WScript.Shell")
   'WScript.Echo(myHostShell & " start")
	'wscript.echo newcmd
    ret = Shell.Run (newcmd, 0, true)
	'WScript.Echo(myHostShell & " end")
	
    WScript.Quit(ret)
 end if
' the real script code goes here ...

'wscript.Echo(myHostShell & " go")

Public SuiteName : SuiteName = "E-nventory"
Public  SuiteProg : SuiteProg = "DoClient"

Dim EnventoryLogDir
Dim EnventoryDataDir
Dim EmailFrom
Dim EmailTo
Dim DDEEVV
Dim DBhistoryDays
Dim DBhistoryUnique
Dim DBTablePerComputer
Dim DBTablePerOU
Dim DBTableVersion : DBTableVersion = "0.6"
Dim RUNFrequence

Dim WSHFileSignature

Dim EmailCc
Dim EmailServer
Dim EMailPort

Dim MyTypeMemo 
Dim MyTypeAutoincrement
Dim MyTablePrefix

Dim  NtpServer
' Below calls the config and tool files to setups.

Dim myScriptNameExExt
Dim myScriptNameExExtExt
myScriptNameExExt=Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName,".") -1)
myScriptNameExExtExt=Left(myScriptNameExExt,InStrRev(myScriptNameExExt,".")-1)


ExecuteGlobal CreateObject("Scripting.FileSystemObject").OpenTextFile(myScriptNameExExtExt & ".conf.vbs").ReadAll
If Err.Number <> 0 Then
			wscript.echo WScript.ScriptFullName & "::" & myScriptNameExExtExt & ".conf.vbs " & Err.Number & " -- " &  Err.Description
			Err.Clear
End If
ExecuteGlobal CreateObject("Scripting.FileSystemObject").OpenTextFile(myScriptNameExExt & ".conf.vbs").ReadAll
If Err.Number <> 0 Then
			wscript.echo WScript.ScriptFullName & "::" &  myScriptNameExExt & "<<.conf.vbs" & Err.Number & " -- " &  Err.Description
			Err.Clear
End If 


Const ForReading = 1
Const ForWriting = 2 
Const ForAppending = 8


public ToolsTimerStartTime
public ToolsTimerEndTime
ToolsTimerStartTime = 0
ToolsTimerEndTime = 0

Call Main()

Public Sub Main()
	if DDEEVV = True then on error goto 0 else on error resume next
	call ToolsTimerStart()
	dim AppsArr(10)
	dim AppPath
	dim AppsList	
	dim AppShell
	dim AppExec
	dim Mycscript
	Dim wshshell
	dim myRet
	
	Mycscript = "cscript.exe "

	APPPath= Left(WScript.ScriptFullName, InStrRev(Ucase(WScript.ScriptFullName),"\"))
	set WshShell = WScript.CreateObject("WScript.Shell") 

	REM set APPShell=WScript.CreateObject("WScript.Shell")
		REM APPShell.Run "proxycfg.exe -u", 0, true
	REM set APPShell = nothing

	dim i : i = 0 
	if DOEnventoryHardwareActive = true 	then appsarr(i) = DOEnventoryHardwareFile : i = i + 1
	if DOEnventoryLicenseActive = true 		then appsarr(i) = DOEnventoryLicenseFile : i = i + 1
	if DOEnventorySerialNumberActive = true then appsarr(i) = DOEnventorySerialNumberFile : i = i + 1
	if DOEnventorySoftwareActive = true 	then appsarr(i) = DOEnventorySoftwareFile : i = i + 1
	if DOEnventoryAdlistsActive = true 		then appsarr(i) = DOEnventoryAdlistsFile : i = i + 1
	if DOEnventoryAdRepActive = true 		then appsarr(i) = DOEnventoryAdRepFile : i = i + 1
	if DOEnventoryHW2ADActive = true 		then appsarr(i) = DOEnventoryHW2ADFile : i = i + 1
	if DOEnventoryEventIDActive = true 		then appsarr(i) = DOEnventoryEventIDFile : i = i + 1
	appslist = ""
	dim sleeptime 
	dim startsleeptime
	if DDEEVV = true then
		sleeptime = 1 * EnventoryWaitStartup
		startsleeptime = 5 
	else
		sleeptime = 1000 * EnventoryWaitStartup
		startsleeptime = 5000 
	end if
	
	LogFileWrite ("--------new-start----------")
	if DDEEVV = True then wscript.echo ("--------new-start----------")
	LogFileWrite ("going to sleep for " & startsleeptime)
	if DDEEVV = True then wscript.echo ("going to sleep for " & startsleeptime)
	WScript.sleep startsleeptime
	LogFileWrite ("going to sleep for " & sleeptime )
	if DDEEVV = True then wscript.echo("going to sleep for " & sleeptime )
	WScript.sleep sleeptime
	LogFileWrite ("wakeup from " & sleeptime )
	if DDEEVV = True then wscript.echo("wakeup from " & sleeptime )
	for i = 0 to ubound(appsarr)
		if appsarr(i) = "" then 
		
		else
			if DDEEVV = True then on error goto 0 else on error resume next
			set APPShell=WScript.CreateObject("WScript.Shell")
			'			wscript.echo WScript.ScriptFullName & "::" &  APPPath  & appsarr(i)
			logfilewrite APPPath  & appsarr(i)
			if DDEEVV = True then wscript.echo Mycscript & APPPath  & appsarr(i)
			'APPShell.run Mycscript & APPPath  & appsarr(i), 0, true
			'APPShell.exec Mycscript & APPPath  & appsarr(i)
			
			'Set AppExec = APPShell.Exec("%comspec% /k " & Mycscript & Chr(34) & APPPath & appsarr(i) & Chr(34))  
			'Set AppExec = APPShell.Exec("" & Mycscript & Chr(34) & APPPath & appsarr(i) & Chr(34))  
			'Do While AppExec.Status = 0  
			'	WScript.Sleep 1000  
			'Loop  

			myRet = APPPath.Run("" & Mycscript & Chr(34) & APPPath & appsarr(i) & Chr(34), 1, true)

			'APPShell.Run "%comspec% /k " & Mycscript & Chr(34) & APPPath & appsarr(i) & Chr(34), 0, false

			If Err.Number <> 0 Then
				LogFileWrite ( Mycscript & appsarr(i) & " :: " & Err.Number & " -- " &  Err.Description )
				if DDEEVV = True then wscript.echo ( Mycscript & appsarr(i) & " :: " & Err.Number & " -- " &  Err.Description )
				Err.Clear
			else
				appslist = appslist & " " & appsarr(i)
			end if 
			set APPShell = nothing
			sleeptime = 1000*EnventoryWaitApps
			LogFileWrite ("going to sleep for " & sleeptime )
			if DDEEVV = True then wscript.echo("going to sleep for " & sleeptime )
			WScript.sleep sleeptime
		end if
	next
	LogFileWrite ( appslist )
	if DDEEVV = True then wscript.echo( appslist )
	if DDEEVV = True then on error goto 0 else on error resume next
'	LogFileWrite ( "pre " & "\\yourfilesever\\E-nventory\EnventoryToDb\Enventory.doClient.vbs" )
'	set APPShell=WScript.CreateObject("WScript.Shell")
'	APPShell.Run Mycscript & "\\yourfilesever\\E-nventory\EnventoryToDb\Enventory.doClient.vbs", 0, true
'	LogFileWrite ( "post " & "\\yourfilesever\\E-nventory\EnventoryToDb\Enventory.doClient.vbs" )
	LogFileWrite(WScript.ScriptFullName & " Execution Time: " & ToolsTimerGet()  & " seconds.")	
	if DDEEVV = True then wscript.echo(WScript.ScriptFullName & " Execution Time: " & ToolsTimerGet()  & " seconds.")	
End Sub


public function ToolsTimerStart()
	ToolsTimerStartTime = Timer
end function

public function ToolsTimerStop()
	ToolsTimerEndTime = Timer
end function

public function ToolsTimerGet()
	if DDEEVV = True then on error goto 0 else on error resume next
	if ToolsTimerEndTime = 0 then call ToolsTimerStop end if
	ToolsTimerGet = ToolsTimerEndTime - ToolsTimerStartTime
	'wscript.echo WScript.ScriptFullName & "::" &  "timer " & ToolsTimerGet & " " & ToolsTimerEndTime & " " & ToolsTimerStartTime
end function

Function UserNameGet()
	if DDEEVV = True then on error goto 0 else on error resume next
	Dim objNET
		Dim StrUserName
	Set objNET = WScript.CreateObject("WScript.Network")
	UserNameGet = objNET.UserName
	if DDEEVV = true then On Error Goto 0
End Function

Function ComputerNameGet()
	if DDEEVV = True then on error goto 0 else on error resume next
	Dim objNET
	Dim StrComputerName
	Set objNET = WScript.CreateObject("WScript.Network")
	ComputerNameGet = objNET.ComputerName
	if DDEEVV = true then On Error Goto 0
End Function

'************************************
' TIMEZONE
'************************************
Public Function myTimeZone
	if DDEEVV = True then on error goto 0 else on error resume next
	dim os
	Const frmMinutes = true

	for each os in GetObject("winmgmts:").InstancesOf ("Win32_OperatingSystem")
		if frmMinutes = false then
			myTimeZone = os.CurrentTimeZone/60 & ":" & right("00" & os.CurrentTimeZone mod 60, 2)
		else
			myTimeZone = os.CurrentTimeZone
		end if
	next
end function

Public Function TimeZoneOld
	if DDEEVV = True then on error goto 0 else on error resume next
	Dim RegularExpressionObject
	Dim objWMIService
	Dim colItems, objItem
	if DDEEVV = True then on error goto 0 else on error resume next
	Set RegularExpressionObject = New RegExp
	Set objWMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")
	Set colItems = objWMIService.ExecQuery("Select * from Win32_TimeZone")
	For Each objItem In colItems
		'   LogFileWrite( "Bias: " & objItem.Bias
		'   LogFileWrite( "Caption: " & objItem.Caption
		With RegularExpressionObject
			.Pattern = ".*\((.*)\).*"
			.IgnoreCase = True
			.Global = True
		End With
		TimeZone=RegularExpressionObject.Replace(objItem.Caption, "$1")
		
	Next
	If Err.Number <> 0 Then
			LogFileWrite "mail not sent: " & Err.Number & " -- " &  Err.Description & " " & subject
			Err.Clear
			TimeZone = " "
	End If
	
End Function

public DMmyDate
public DBmyEntryDate
public DBmytime
Dim DBmyEntryDateStr
Dim DBmyTimeStr
Dim DBmyTZStr
 
Dim sScriptNameExExt
Dim sScriptNameExExtExt

Function DBSetDateTime
	Dim myEntryDatetime(2)
	If IsEmpty(DMmyDate) Then  ' freeze time for whole run
 		DMmyDate= date()
 		DBmytime= Time()
	End If 
		
	DBmyTZStr = myTimeZone()
	DBmyEntryDateStr = Year(DMmyDate) & "-" & Right("00" & Left(Int(Month(DMmyDate)), 2), 2) & "-" & Right("00" & Left(Int(Day(DMmyDate)), 2), 2)
	If DDEEVV = True Then
 		DBmyTimeStr = FormatDateTime(DBmytime, 3)
 	Else
 		DBmyTimeStr = "00:00"
 	End If
	DBmyEntryDate =  DatePart("m", DMmyDate) & "/" & DatePart("d", DMmyDate) & "/" & DatePart("yyyy", DMmyDate)
	myEntryDatetime(0) = DBmyEntryDateStr
	myEntryDatetime(1) = DBmyTimeStr
	
	DBSetDateTime = myEntryDatetime
End Function

'************************************
' LOG File
'************************************
dim LogFileWriteLastMessage

Public Function LogFileWrite(Message)	
	if DDEEVV = True then on error goto 0 else on error resume next
	Dim objLOGFileFSO ' the log file 
	Dim objLOGFile ' the log file 
	'Dim DBmyTimeStr, DBmyEntryDateStr

	Set objLOGFileFSO = CreateObject("Scripting.FileSystemObject")
	Set objLOGFile = LogFileOpen (objLOGFileFSO)
	'DBmyEntryDateStr = Year(DBmyEntryDate) & "-" & Right("00" & Left(Int(Month(DBmyEntryDate)), 2), 2) & "-" & Right("00" & Left(Int(Day(DBmyEntryDate)), 2), 2)
	REM If DDEEVV = True Then
 		REM DBmyTimeStr = FormatDateTime(DBmytime, 3)
 	REM Else
 		REM DBmyTimeStr = "00:00"
 	REM End If
	if LogFileWriteLastMessage <> message then
		objLOGFile.Write( DBmyEntryDateStr & " " & DBmyTimeStr & " " & myTimeZone () & " " & UserNameGet() & "@" & ComputerNameGet() & " " & (Message) & VbCrLf)
		If Err.Number <> 0 Then
			Err.Clear
			'wscript.quit
		end if
		LogFileWriteLastMessage = message
	end if
	objLOGFile.close : 	Set objLOGFile = Nothing :	Set objLOGFileFSO = Nothing
	if DDEEVV = true then On Error Goto 0
End Function


dim islogfileopen 
islogfileopen = false

Public Function LogFileOpen (objmyLOGFileFSO)
	if DDEEVV = True then on error goto 0 else on error resume next
	'if DDEEVV = false then On Error Resume Next 
	Dim strFilename, strDirectory
	Dim WaitForFile 
	Dim WaitForFileCount
	
	if DDEEVV = true then On Error Goto 0 Else On Error Resume Next
	strDirectory = EnventoryLogDir & "\"
	'wscript.echo strDirectory
	If ToolsTimerStartTime = 0 Then
		Call ToolsTimerStart
	End If
	Call DBSetDateTime 

	if islogfileopen = false then
		islogfileopen = true
		makeDirectory (strDirectory)
		DelOld (strDirectory) 	
	end if
		
	sScriptNameExExt=Left(WScript.ScriptName, InStrRev(WScript.ScriptName,"."))
	strFileName=sScriptNameExExt & DBmyEntryDateStr & ".log"
	
	WaitForFile = True
	WaitForFileCount = 10
	Do 
		On Error Resume Next
		Set LogFileOpen = objmyLOGFileFSO.OpenTextFile(strDirectory & strFileName, ForAppending, True)	
		If Err.Number <> 0 Then
			Err.Clear
			WScript.sleep DBWaitForFile  * Abs(11 - WaitForFileCount)
			WaitForFileCount = WaitForFileCount - 1
		Else
			WaitForFile=False
		End If
		If (WaitForFileCount = 0) Then
			WScript.quit 
		End If
	Loop Until WaitForFile = False
	if DDEEVV = true then On Error Goto 0
End Function

Public Function LogFileClose
	if DDEEVV = false then On Error Resume Next 
    LogFileWrite(WScript.ScriptFullName & " Execution Time: " & ToolsTimerGet()  & " seconds.")	
	CloseIE
End Function

'''''''''''''''''''''''''''''''''''''''''''''''''''
' This method is responsible for creating a directory
' The directory can be several layers deep, and if the
' parent directories don't exist, it creates them.
' If the directory already exists, it is left alone
''''''''''''''''''''''''''''''''''''''''''''''''

sub makeDirectory (newPath)
	'if DDEEVV = true then wscript.echo WScript.ScriptFullName & "::" & "MakeDirectory " & newPath
	if DDEEVV = True then on error goto 0 else on error resume next
	
	Dim myArray,length,count,path,outputFileObject
	
	Set outputfileObject = CreateObject("Scripting.FileSystemObject")
	
	if outputfileObject.FolderExists(newPath) then
		'if DDEEVV = true then wscript.echo WScript.ScriptFullName & "::" & "Dir: " & newPath & " already exists" 
		exit sub
	end if
	
	path = ""
	count = 0
	myArray = split(newPath, "\")
	length = ubound(myArray)
	while count <= length 
		path = path + myArray(count) + "\"
		count = count + 1
		if not outputfileObject.FolderExists(path) then 
			outputfileObject.CreateFolder(path)
		end if
	wend
	'if DDEEVV = true then wscript.echo WScript.ScriptFullName & "::" & "Created Dir: "&newPath&""
	
end sub

dim dtdiff

private sub DelOld(fldname) 
	if DDEEVV = True then on error goto 0 else on error resume next
	
	dim fso
	dim fldr
	Dim dttoday
	set fso = createobject("scripting.filesystemobject")
	set fldr = fso.getfolder(fldname)
	dttoday = date
	'set dt2monthsago = dateadd("m", -2, dttoday)
	dtdiff = dateadd("d", -9, dttoday)
	'wscript.echo ( WScript.ScriptFullName & " DelOld " & fldname & " " &dtdiff )
	recurse fldr 
end sub

sub recurse( byref fldr)
	on error resume next
	dim subfolders,files,folder,file
	set subfolders = fldr.subfolders
	set files = fldr.files
	' myDEBUG fldr.path
	for each file in files
	    if file.datelastmodified < dtdiff then
	      'wscript.echo( WScript.ScriptFullName & " Deleting " & file.name & " last modified: " & file.datelastmodified)
	      on error resume next
	      file.delete
	    end if
	next  
	for each folder in subfolders
		recurse folder
	next  
	set subfolders = nothing
	set files = nothing
end sub
 

public function myFilesDirGet()
    dim wshShell
	Set WshShell = Wscript.CreateObject("Wscript.Shell")
	myFilesDirGet=WshShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Personal")
	
end function

public function isAppDriveLocal(strPathName)
	dim objFSO
	dim objDRV
	isAppDriveLocal = true
	
	if left(strPathName,2) <> "\\" then
		set objFSO = CreateObject("Scripting.FileSystemObject")
		Set objDRV = objFSO.GetDrive(left(strPathName,1))
		Dim drtype
		
		select case objDRV.DriveType
		   case 0: drtype = "Unknown"
		   case 1: drtype = "Removable"
		   case 2: drtype = "Fixed"
		   case 3: drtype = "Network" : isAppDriveLocal = false
		   case 4: drtype = "CD-ROM"
		   case 5: drtype = "RAM Disk" 
		end select
	else
		drtype = "UNC" : isAppDriveLocal = false
	end if
	'wscript.echo ("The specified drive " & strPathName & " is a " & drtype & " type disk.") 
end function


'' SIG '' Begin signature block
'' SIG '' MIID6AYJKoZIhvcNAQcCoIID2TCCA9UCAQExDjAMBggq
'' SIG '' hkiG9w0CBQUAMGYGCisGAQQBgjcCAQSgWDBWMDIGCisG
'' SIG '' AQQBgjcCAR4wJAIBAQQQTvApFpkntU2P5azhDxfrqwIB
'' SIG '' AAIBAAIBAAIBAAIBADAgMAwGCCqGSIb3DQIFBQAEEOJo
'' SIG '' L1nRkTLcUTGO00sWkBGgggISMIICDjCCAXegAwIBAgIQ
'' SIG '' fduYp37PJolB2l4qUoy9tjANBgkqhkiG9w0BAQQFADAV
'' SIG '' MRMwEQYDVQQDEwplLW52ZW50b3J5MB4XDTEwMTIzMTIz
'' SIG '' MDAwMFoXDTE2MTIzMTIzMDAwMFowFTETMBEGA1UEAxMK
'' SIG '' ZS1udmVudG9yeTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
'' SIG '' gYkCgYEAxoqL8otb0bZl/B6QNeNKa7wgv9FzkgeuH0/K
'' SIG '' Mqta3uf+k/JJF0eRdm/e+R17t2Fy0nn4kkfK/0339ZKA
'' SIG '' j+LrC6N0Z2XzotG2Tf5CR2XYHwGWtXvL1edczqrPEwnJ
'' SIG '' Bep8Fki6p0/CSSFueWSjRmMr3nP5+PNnMWarU/OyVdep
'' SIG '' yDMCAwEAAaNfMF0wEwYDVR0lBAwwCgYIKwYBBQUHAwMw
'' SIG '' RgYDVR0BBD8wPYAQlJeutLm/XtOFAEGETQ1/HKEXMBUx
'' SIG '' EzARBgNVBAMTCmUtbnZlbnRvcnmCEH3bmKd+zyaJQdpe
'' SIG '' KlKMvbYwDQYJKoZIhvcNAQEEBQADgYEAKFw68m9BqK1a
'' SIG '' mJUm2YxwCsT3mWy4nilgTWlC+wj64jouYVSY1Ozhm7L8
'' SIG '' ALBzVvvFCeHMHmvpN4pZdqzAf9CnTcNWPkYBq5Hep2aM
'' SIG '' by6t/JiG9lPhC327WWW5IQV3T+FtK2G1qW9UMGi83PMV
'' SIG '' FhUJeBp5hhxXhWORlcBZg5aiVpgxggFAMIIBPAIBATAp
'' SIG '' MBUxEzARBgNVBAMTCmUtbnZlbnRvcnkCEH3bmKd+zyaJ
'' SIG '' QdpeKlKMvbYwDAYIKoZIhvcNAgUFAKBsMBAGCisGAQQB
'' SIG '' gjcCAQwxAjAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3
'' SIG '' AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV
'' SIG '' MB8GCSqGSIb3DQEJBDESBBBdKJnT4Udt25ULuj+NrXbG
'' SIG '' MA0GCSqGSIb3DQEBAQUABIGAKJeQjQ+US5Ps6V+/oc21
'' SIG '' 1TaZTg7XULn8pdEdS7oFfdOoSN23zSSfGDRH0cjweQOj
'' SIG '' CAx8d4B3MkZReB/T5MGKFWhz+suHaqB/FbDPSs19IjQ5
'' SIG '' Y1WjeGhRvOG/ZBIXUfprJIlF9jhU13wCDA87KAvX8wYs
'' SIG '' wzLyzkfGyXvhyEHvd4Q=
'' SIG '' End signature block
